During the lifecycle of large software projects several software design artifacts, such as, but not limited to, requirements specifications, test plans, use-case documents and class descriptions of object-oriented programming languages are generated. Any change in one such artifact could necessitate a change in many of the other software design artifacts as well. The ability to assess the impact of a change, in any one of the software design artifacts, on the rest of the project artifacts is a critical aspect of software engineering. However, as software design artifacts are created and updated their relationship to other artifacts is not always fixed and also not always apparent without the use of some sorts of explicit links established manually by the developers.
Maintaining user-specified explicit links between software design artifacts has many costs. For instance, such methods add substantial overhead in terms of computing resources needed to maintain the links throughout the software development lifecycle. In addition to the computing resources such methods require personnel, such as developers, business analysts, architects and other stake holders to spend valuable time to maintain the manual links.
Establishing and maintaining explicit links between related software design artifacts throughout the software development cycle also means that such relationships have to be continuously established and maintained through the software development lifecycle. Any gaps in such an effort will mean that certain relationships may be missed. Also, these methods do not lend themselves easily to ascertaining the relationships between software design artifacts in advanced stages of the software development lifecycle when a large number of such artifacts are already in place.
Thus, there is a need for automating the process of determining and quantifying relationships between various software design artifacts generated during the software development lifecycle.